#include<iostream>
#include<cmath>
using namespace std;

int n, path[10];
bool v[10] = {false};

bool check(int i, int step) {
    // 是否可放置我们的皇后棋子
    //  i：下一个皇后棋子放置的列号；step：已有的皇后棋子
    if (v[i])
        return false;
    for(int j=0; j<step; j++) {
        // 遍历已有皇后棋子
        if(abs(i-path[j]) == abs(step-j))
        // 如果下一个皇后棋子与已有皇后棋子的行列差值相等的话，那么无法放置
            return false;
    }
    return true;
}

void dfs(int step) {
    if(step == n) {
        for(int i=0; i<n; i++)
            cout << path[i]+1 << " ";
        cout << endl;
    } else {
        for(int i=0; i<n; i++) {
            if(check(i, step)) {
                path[step] = i;
                v[i] = true;
                dfs(step + 1);
                v[i] = false;
                path[step] = -1;
            }
        }
    }
}

int main () {
    cin >> n;
    dfs(0);
    return 0;
}